/**
 * @param {string} url
 * @returns {Object}
 */
function param2Obj(url) {
  const search = decodeURIComponent(url.split('?')[1]).replace(/\+/g, ' ')
  if (!search) {
    return {}
  }
  const obj = {}
  const searchArr = search.split('&')
  searchArr.forEach(v => {
    const index = v.indexOf('=')
    if (index !== -1) {
      const name = v.substring(0, index)
      const val = v.substring(index + 1, v.length)
      obj[name] = val
    }
  })
  return obj
}

/**
 * This is just a simple version of deep copy
 * Has a lot of edge cases bug
 * If you want to use a perfect deep copy, use lodash's _.cloneDeep
 * @param {Object} source
 * @returns {Object}
 */
function deepClone(source) {
  if (!source && typeof source !== 'object') {
    throw new Error('error arguments', 'deepClone')
  }
  const targetObj = source.constructor === Array ? [] : {}
  Object.keys(source).forEach(keys => {
    if (source[keys] && typeof source[keys] === 'object') {
      targetObj[keys] = deepClone(source[keys])
    } else {
      targetObj[keys] = source[keys]
    }
  })
  return targetObj
}

/**
 * 成功返回
 * @param {Object} data 数据
 * @param {String} code 业务码
 * @param {String} message 提示消息
 */
function success(data, message, code) {
  return {
    'status': 1,
    'code': code ?? 200,
    'message': message ?? '操作成功',
    data
  }
}

/**
 * 错误返回
 * @param {String} code 业务码
 * @param {String} message 提示消息
 */
function error(message, code) {
  return {
    'status': 0,
    'code': code ?? 401,
    'message': message ?? '操作失败'
  }
}

module.exports = {
  param2Obj,
  deepClone,
  success,
  error
}
